package com.xls.springboot.logging;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.lang.reflect.Array;
import java.util.Arrays;


@Aspect
@Component
public class ApplicationLoggerAspect {

    private  final Logger log= LoggerFactory.getLogger(this.getClass());
    @Pointcut("within(com.xls.springboot.controller..*)" + "|| within(com.xls.springboot.dao..*)")
    public void definePackagePointcuts(){

//        空方法，只是用来定义切点

    }
//    @Before("definePackagePointcuts()")
//    public void logBefore(JoinPoint joinPoint){
//    log.debug("\n\n\n");
//    log.debug("*****************方法执行前***************");
//    log.debug(
//            joinPoint.getSignature().getDeclaringTypeName(),
//            joinPoint.getSignature().getName(),
//            Arrays.toString(joinPoint.getArgs())
//    );
//    log.debug("---------------------------------------------------");
//    log.debug("\n\n\n");
//    }
//    @After("definePackagePointcuts()")
//    public void logAfter(JoinPoint joinPoint){
//        log.debug("\n\n\n");
//        log.debug("*****************方法执行后***************");
//        log.debug(
//                joinPoint.getSignature().getDeclaringTypeName(),
//                joinPoint.getSignature().getName(),
//                Arrays.toString(joinPoint.getArgs())
//        );
//        log.debug("---------------------------------------------------");
//        log.debug("\n\n\n");
//    }
    @Around("definePackagePointcuts()")
    public Object logAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {


        log.debug("\n\n\n");
        log.debug("*****************方法执行前***************");
        log.debug(
                proceedingJoinPoint.getSignature().getDeclaringTypeName(),
                proceedingJoinPoint.getSignature().getName(),
                Arrays.toString(proceedingJoinPoint.getArgs())
        );
        log.debug("---------------------------------------------------");
        log.debug("\n\n\n");

Object object=proceedingJoinPoint.proceed();
        log.debug("\n\n\n");
        log.debug("*****************方法执行后***************");
        log.debug(
                proceedingJoinPoint.getSignature().getDeclaringTypeName(),
                proceedingJoinPoint.getSignature().getName(),
                Arrays.toString(proceedingJoinPoint.getArgs())
        );
        log.debug("---------------------------------------------------");
        log.debug("\n\n\n");

        return object;
    }





}
